﻿using System;

namespace Framework
{
    public interface IModuleEventListener
    {
        public void AddModuleListener<T>(string eventName, Action<T> handler);

        public void AddModuleListener(string eventName, Action handler);

        public void AddModuleListener<T, U>(string eventName, Action<T, U> handler);

        public void AddModuleListener<T, U, V>(string eventName, Action<T, U, V> handler);

        public void AddModuleListener<T, U, V, W>(string eventName, Action<T, U, V, W> handler);

        public void CleanupModuleEvents();

        public void RemoveModuleEvents(string eventName);

        public void RemoveModuleListener(string eventName, Action handler);

        public void RemoveModuleListener<T>(string eventName, Action<T> handler);

        public void RemoveModuleListener<T, U>(string eventName, Action<T, U> handler);

        public void RemoveModuleListener<T, U, V>(string eventName, Action<T, U, V> handler);

        public void RemoveModuleListener<T, U, V, W>(string eventName, Action<T, U, V, W> handler);
    }
}